package com.billdowney.qq.robot.util;

import java.io.*;

public class FileUnit {

    private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";

    public static void savePic(InputStream inputStream, String filePath) {
        OutputStream os = null;
        try {
            os = new FileOutputStream(filePath);
            // 2、保存到临时文件
            // 1K的数据缓冲
            byte[] bs = new byte[1024];
            // 读取到的数据长度
            int len;
            // 输出的文件流保存到本地文件
            File tempFile = new File(filePath);
            //判断文件夹是否存在
            if (!tempFile.exists()) {
                tempFile.mkdirs();
            }
            // 开始读取
            while ((len = inputStream.read(bs)) != -1) {
                os.write(bs, 0, len);

            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 完毕，关闭所有链接
            try {
                os.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 删除单个文件
     * @param   path    被删除文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public static boolean deleteFile(String path) {
        File file = new File(path);
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            file.delete();
            return true;
        }
        return false;
    }


    /*删除文件夹主方法入口*/
          static   boolean  flag =false;
          static File file=null;


    public boolean DeleteFolder(String sPath) {
        flag = false;

        file = new File(sPath);

// 判断目录或文件是否存在

        if (!file.exists()) { // 不存在返回 false

            return flag;

        } else {
// 判断是否为文件

            if (file.isFile()) { // 为文件时调用删除文件方法

                return deleteFile(sPath);

            } else { // 为目录时调用删除目录方法

                return deleteDirectory(sPath);

            }

        }

    }

    /*实现删除文件的方法*/

    public boolean deleteFile1(String sPath) {
        flag = false;
        file = new File(sPath);

// 路径为文件且不为空则进行删除

        if (file.isFile() && file.exists()) {
            file.delete();

            flag = true;

        }

        return flag;

    }

    /*删除文件夹的方法*/

    public static boolean deleteDirectory(String sPath) {
//如果sPath不以文件分隔符结尾，自动添加文件分隔符

        if (!sPath.endsWith(File.separator)) {
            sPath = sPath + File.separator;

        }

        File dirFile = new File(sPath);

//如果dir对应的文件不存在，或者不是一个目录，则退出

        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;

        }

        flag = true;

//删除文件夹下的所有文件(包括子目录)

        File[] files = dirFile.listFiles();

        for (int i = 0; i < files.length; i++) {
//删除子文件

            if (files[i].isFile()) {
                flag = deleteFile(files[i].getAbsolutePath());

                if (!flag) break;

            } //删除子目录

            else {
                flag = deleteDirectory(files[i].getAbsolutePath());

                if (!flag) break;

            }

        }

        if (!flag) return false;

//删除当前目录

        if (dirFile.delete()) {
            return true;

        } else {
            return false;

        }

    }



    /**
     * 删除导出的表  每天删除一次
     */
    public static boolean deleteFile(File file) {
        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()) {
            System.out.println("文件删除失败,请检查文件路径是否正确");

        }
        //取得这个目录下的所有子文件对象
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f : files) {
            //打印文件名
            String name = file.getName();
            System.out.println(name);
            //判断子目录是否存在子目录,如果是文件则删除
            if (f.isDirectory()) {
                deleteFile(f);
            } else {
                f.delete();
            }
        }
        //删除空文件夹  for循环已经把上一层节点的目录清空。
        return file.delete();
    }

    //复制并创建文件
    public static File createNewFile(String oldfilepath, String newpath,String name) {
        // 读取模板，并赋值到新文件************************************************************
        // 文件模板路径
        System.out.println("查找文件路径；"+oldfilepath);
        File file = new File(oldfilepath);
        // 判断路径是否存在
        File dir = new File(newpath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        System.out.println("createNewFile path:" + newpath);
        // 写入到新的文件
        File newFile = new File(newpath, name);
        try {
            newFile.createNewFile();
            // 复制模板到新文件
            fileChannelCopy(file, newFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return newFile;
    }


    /**
     * 复制文件
     *
     * @param s 源文件
     * @param t 复制到的新文件
     */

    public static void fileChannelCopy(File s, File t) {
        try {
            InputStream in = null;
            OutputStream out = null;
            try {
                in = new BufferedInputStream(new FileInputStream(s), 1024);
                out = new BufferedOutputStream(new FileOutputStream(t), 1024);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = in.read(buffer)) != -1) {
                    out.write(buffer, 0, len);
                }
            } finally {
                if (null != in) {
                    in.close();
                }
                if (null != out) {
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    public static void appendMethod_one(String fileName, String content) {
        try {
            // 按读写方式创建一个随机访问文件流
            RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
            long fileLength = raf.length();// 获取文件的长度即字节数
            // 将写文件指针移到文件尾。
            raf.seek(fileLength);
            // 按字节的形式将内容写到随机访问文件流中
            raf.writeBytes(content);
            // 关闭流
            raf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 使用FileWriter实现文件的追加，其中：fileName表示文件名；content表示要追加的内容
    public static void appendMethod_two(String fileName, String content) {
        try {
            // 创建一个FileWriter对象，其中boolean型参数则表示是否以追加形式写文件
            FileWriter fw = new FileWriter(fileName, true);
            // 追加内容
            fw.write(content);
            // 关闭文件输出流
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void showFileContent(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        try {
            System.out.println("以行为单位读取文件内容，一次读一整行：");
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            int line = 1;
            // 一次读入一行，直到读入null为文件结束
            while ((tempString = reader.readLine()) != null) {
                // 显示行号
                System.out.println(line + ": " + tempString);
                line++;
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }



}
